<!DOCTYPE html>
            
<HTML>
<HEAD>
<meta name="booktitle" content="Developing Applications With Objective Caml" >
 <meta charset="ISO-8859-1"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<META name="GENERATOR" content="hevea 1.05-7 of 2000-02-24">
<META NAME="Author" CONTENT="Christian.Queinnec@lip6.fr">
<LINK rel=stylesheet type="text/css" href="videoc-ocda.css">
<script language="JavaScript" src="videoc.js"><!--
//--></script>
<TITLE>
 To learn more
</TITLE>
</HEAD>
<BODY class="regularBody">
<A HREF="book-ora021.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
<A HREF="index.html"><IMG SRC ="contents_motif.gif" ALT="Contents"></A>
<A HREF="book-ora024.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
<HR>

<H2> To learn more</H2>The computation model for functional languages is <FONT FACE=symbol>l</FONT>-calculus, which
was invented by Alonzo Church in 1932. Church's goal was to define a
notion of effective computability through the medium of
<FONT FACE=symbol>l</FONT>-definability. Later, it became apparent that the notion thus
introduced was equivalent to the notions of computability in the sense of
Turing (Turing machine) and G�del-Herbrand (recursive functions). This
co�ncidence leads one to think that there exists a universal notion of
computability, independent of particular formalisms: this is Church's
thesis. In this calculus, the only two constructions are abstraction and
application. Data structures (integers, booleans, pairs, ...) can be coded
by <FONT FACE=symbol>l</FONT>-termes.<BR>
<BR>
Functional languages, of which the first representative was Lisp,
implement this model and extend it mainly with more efficient data
structures. For the sake of efficiency, the first functional languages
implemented physical modifications of memory, which among other things
forced the evaluation strategy to be immediate, or strict, evaluation. In
this strategy, the arguments of functions are evaluated before being passed
to the function. It is in fact later, for other languages such as
Miranda, Haskell, or LML, that the strategy of delayed (lazy, or
call-by-need) evaluation was implemented for pure functional languages.<BR>
<BR>
Static typing, with type inference, was promoted by the ML family at the
start of the 80's. The web page


<H3> Link </H3> <HR>

<A HREF="http://www.pps.jussieu.fr/~cousinea/Caml/caml_history.html">http://www.pps.jussieu.fr/~cousinea/Caml/caml_history.html</A>


<HR>


presents a historical overview of the ML language.
Its computation model is typed <FONT FACE=symbol>l</FONT>-calculus, 
a subset of <FONT FACE=symbol>l</FONT>-calculus. It guarantees that no
type error will occur during program execution. 
Nevertheless ``completely correct'' programs can be rejected by ML's type
system. These cases seldom arise and these programs can always be
rewritten in such a way as to conform to the type system.<BR>
<BR>
The two most-used functional languages are Lisp and ML,
representatives of impure functional languages. To deepen the functional
approach to programming, the books [<A HREF="book-ora214.html#Abelson89"><CITE>ASS96</CITE></A>] and
[<A HREF="book-ora214.html#Cousineau-Mauny"><CITE>CM98</CITE></A>] 
each present a general programming course using the languages 
Scheme (a dialect of Lisp) and Caml-Light, respectively.

<BR>
<BR>
<BR>
<BR>
<HR>
<A HREF="book-ora021.html"><IMG SRC ="previous_motif.gif" ALT="Previous"></A>
<A HREF="index.html"><IMG SRC ="contents_motif.gif" ALT="Contents"></A>
<A HREF="book-ora024.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
</BODY>
</HTML>
